home *** CD-ROM | disk | FTP | other *** search
- UNIT Fill;
- (**) INTERFACE (**)
- PROCEDURE FillWord(VAR Dest; Count, What : Word);
- PROCEDURE FillOthr(VAR Dest; Count : Word; What : Byte);
- PROCEDURE FillPatt(VAR Dest, Patt; Count, Siz : Word);
- PROCEDURE FillPattOthr(VAR Dest, Patt; Count,
- Siz : Word);
-
- (**) IMPLEMENTATION (**)
- PROCEDURE FillWord(VAR Dest; Count, What : Word);
- Assembler;
- ASM
- LES DI, Dest {ES:DI points to destination}
- MOV CX, Count {count in CX}
- MOV AX, What {word to fill with in AX}
- CLD {forward direction}
- REP STOSW {perform the fill}
- END;
-
- PROCEDURE FillOthr(VAR Dest; Count : Word; What : Byte);
- Assembler;
- ASM
- LES DI, Dest {ES:DI points to destination}
- MOV CX, Count {count in CX}
- MOV AL, What {byte to fill with in AL}
- CLD {forward direction}
- @TheLoop:
- STOSB {store one byte}
- INC DI {skip one byte}
- Loop @TheLoop
- END;
-
- PROCEDURE FillPatt(VAR Dest, Patt; Count, Siz : Word);
- Assembler;
- ASM
- MOV CX, Siz
- JCXZ @Out
- XCHG CX, DX {size of pattern in DX}
- MOV CX, Count {count in CX}
- JCXZ @Out
- PUSH DS
- LES DI, Dest {ES:DI points to destination}
- LDS SI, Patt {DS:SI points to pattern}
- MOV BX, SI {save SI in BX}
- CLD {forward direction}
- @PatLoop:
- PUSH CX {save count for outer loop}
- MOV CX, DX {put inner count in CX}
- MOV SI, BX {DS:SI points to source}
- REP MOVSB {make one copy of pattern}
- POP CX {restore count for outer loop}
- LOOP @PatLoop
- POP DS
- @Out:
- END;
-
- PROCEDURE FillPattOthr(VAR Dest, Patt; Count,
- Siz : Word); Assembler;
- ASM
- MOV CX, Siz
- JCXZ @Out
- XCHG CX, DX {size of pattern in DX}
- MOV CX, Count {count in CX}
- JCXZ @Out
- PUSH DS
- LES DI, Dest {ES:DI points to destination}
- LDS SI, Patt {DS:SI points to pattern}
- MOV BX, SI {save SI in BX}
- CLD {forward direction}
- @PatLoop:
- PUSH CX {save count for outer loop}
- MOV CX, DX {put inner count in CX}
- MOV SI, BX {DS:SI points to source}
- @TheLoop:
- LODSB {get a byte from pattern..}
- STOSB {.. and store in destination}
- INC DI {skip a byte}
- LOOP @TheLoop
- POP CX {restore count for outer loop}
- LOOP @PatLoop
- POP DS
- @Out:
- END;
-
- END.